java开发中常用的几种设计模式及代码例子

  • 原创
  • |
  • 浏览:10398
  • |
  • 更新:

Java语言教程中,都会提到23种设计模式,其实日常开发中,用的比较频繁的也就那么几种。把握了一下几种模式的灵活应用,代码水平会有很大的提高。

java开发中常用的几种设计模式及代码例子

工具/原料

  • eclipse

方法/步骤

  1. 1

    单例模式

    是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。

    package design.pattern;

    public class Singleton {

        private static Singleton singleton;

        private Singleton() {}

        public static Singleton getInstance() {

            if (singleton == null) {

                synchronized (Singleton.class) {

                    singleton = new Singleton();

                }

            }

            return singleton;

        }

    }

    java开发中常用的几种设计模式及代码例子
  2. 2

    工厂模式

    根据需要返回我们的对象。应用比较熟悉的场景就是spring配置文件了。

    package design.pattern;

    public class MyFactory {

    public static final int TYPE_MI = 1;// 大米

    public static final int TYPE_YU = 2;// 油

    public static final int TYPE_SC = 3;// 蔬菜

    public static Food getFoods(int foodType) {

    switch (foodType) {

    case TYPE_MI:

    return new DaMi();

    case TYPE_YU:

    return new You();

    case TYPE_SC:

    default:

    return new ShuCai();

    }

    }

    }

    abstract class Food {

    }

    class DaMi extends Food {

    }

    class You extends Food {

    }

    class ShuCai extends Food {

    }

    java开发中常用的几种设计模式及代码例子
  3. 3

    适配器模式

       将一个类的接口转换成客户希望的另外一个接口。通俗地讲,就是在2个类之间做了一个衔接。比如你在调用A类的doSomething方法,实际上内部实现调用了B类的doSomething方法。

    package design.pattern;

    public class MyAdapter {

    private MyAdapterImpl adapterImpl;

    public MyAdapter(MyAdapterImpl myAdapterImpl) {

    this.adapterImpl = myAdapterImpl;

    }

    public void doSomething() {

    adapterImpl.doSomething();

    }

    public static void main(String args[]) {

    new MyAdapter(new MyAdapterImpl()).doSomething();

    }

    }

    class MyAdapterImpl {

    public void doSomething() {

    }

    }

    java开发中常用的几种设计模式及代码例子
  4. 4

    代理模式

    它的定义是:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。Java的反射机制,很多地方就用了代理模式来实现。

    package design.pattern;

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Method;

    import java.lang.reflect.Proxy;

    public class DynamicProxyMain {

    public static void main(String[] args) {

    Person smallPerson = new Child();

    Person proxyBuyHouse = (Person) Proxy.newProxyInstance(Person.class.getClassLoader(),

    new Class[] { Person.class }, new DynamicProxyHandler(smallPerson));

    proxyBuyHouse.eat();

    }

    }

    interface Person {

    void eat();

    }

    class Child implements Person {

    @Override

    public void eat() {

    // 小孩吃什么

    System.out.println("eating");

    }

    }

    class DynamicProxyHandler implements InvocationHandler {

    private Object object;

    public DynamicProxyHandler(final Object object) {

    this.object = object;

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    System.out.println("调用前日志监控");

    Object result = method.invoke(object, args);

    System.out.println("调用后日志监控");

    return result;

    }

    }

    java开发中常用的几种设计模式及代码例子
  5. 5

    监听模式

    当事件源触发某种行为,会自动执行事件监听器里面相应的方法。

    Java监听模式右三个部分组成:事件源、事件对象、事件监听器。

    package design.pattern;

    public class ListenerTest {

    public static void main(String[] args) {

    MyListener myListener = new MyListener();

    MyPerson person = new MyPerson();

    person.addEatListener(myListener);

    person.eat();

    }

    }

    //事件源

    class MyPerson{

    private Listener listener;//监听器引用

    //给事件源添加监听器

    public void addEatListener(Listener listener) {

    this.listener = listener;

    }

    public void eat() {

    //吃了很多

    if(listener != null) {

    Event event=new Event() ;

    event.setPerson(this);

    listener.isThinking(event);//监听吃饭时,想了什么

    }

    }

    }

    //事件

    class Event {

    private MyPerson person;// 事件源的引用

    public MyPerson getPerson() {

    return person;

    }

    public void setPerson(MyPerson person) {

    this.person = person;

    }

    }

    interface Listener {

    public void isThinking(Event event);

    }

    class MyListener implements Listener {

    @Override

    public void isThinking(Event event) {

    System.out.println(" is isThinking many things !");

    }

    }

    java开发中常用的几种设计模式及代码例子
  6. 5
    相关内容非法爬取自百度经验
  7. 6

    装饰器模式

    简单说就是不改变现有类的结构前提下,扩展它的功能。用别的类来增加原有类的功能。

    package design.pattern;

    public class MyDecorator {

    public static void main(String[] args) {

    Animal animal= new SmallDog(new Pet());

    animal.eat();

    }

    }

    interface Animal {

    public void eat();

    }

    class Pet implements Animal {

    @Override

    public void eat() {

    System.out.println("eat food");

    }

    }

    class Dog implements Animal{

    protected Animal animal;

    public Dog(Animal animal) {

    this.animal = animal;

    }

    @Override

    public void eat() {

    this.animal.eat();

    }

    }

    class SmallDog extends Dog{

    public SmallDog(Animal animal) {

    super(animal);

    }

    public void eat() {

    System.out.println("eat other food ");

    this.animal.eat();

    }

    }

    java开发中常用的几种设计模式及代码例子
    java开发中常用的几种设计模式及代码例子
    END

注意事项

  • 结合项目,灵活运用
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部