设计模式

来源:互联网 发布:vb控件适应窗体大小 编辑:程序博客网 时间:2024/06/07 01:23

一、简单工厂

定义产品抽象类

public abstract class Animal {    public abstract void eat();}

定义工厂抽象类,返回产品抽象类

public interface Factory {    public Animal createAnimal();}

定义实体类,实现产品抽象类

public class Cat extends Animal {    @Override    public void eat() {        System.out.println("猫吃鱼");    }}public class Dog extends Animal {    @Override    public void eat() {        System.out.println("狗吃肉");    }}

定义工厂实体类,实现工厂抽象类

public class CatFactory implements Factory {    @Override    public Animal createAnimal() {        return new Cat();    }}public class DogFactory implements Factory {    @Override    public Animal createAnimal() {        return new Dog();    }}

编写测试方法

public void test{    DogFactory df = new DogFactory();    Dog d = (Dog) df.createAnimal();    d.eat();    new CatFactory().createAnimal().eat();}

二、简单工厂

定义产品抽象类

public abstract class Animal {    public abstract void eat();}

定义实体类,实现产品抽象类

public class Cat extends Animal {    @Override    public void eat() {        System.out.println("猫吃鱼");    }}public class Dog extends Animal {    @Override    public void eat() {        System.out.println("狗吃肉");    }}

创建简单工厂,返回产品

public class AnimalFactory {    public static Animal createAnimal(String name){        if (name.equals("dog")) {            return new Dog();        }else if (name.equals("cat")) {            return new Cat();        }else {        return null;        }    } }

三、适配器模式

创建接口

interface 接口{    void 吃饭();    void 睡觉();    void 学习();}

定义为抽象,目的是不让创建本类对象,本类对象都是空的方法,创建对象调用没有任何意义,适配器类只是一个过度类

abstract class 适配器类 implements 接口{    @Override    public void 吃饭() {}    @Override    public void 睡觉() {}    @Override    public void 学习() {} }

只重写需要的方法,其他的方法同样拥有,但是不进行重写

class Student extends 适配器类{    @Override    public void 学习() {} }

四、单例设计模式

饿汉式

class Singleton{        private Singleton() {};    private static Singleton singleton = new Singleton();    public static Singleton getSingleton(){        return singleton ;    }}

懒汉式,单例延迟加载模式

class Singleton{            private Singleton() {};    private static Singleton singleton ;    public static Singleton getSingleton(){        if(singleton == null){            synchronized (Singleton.class) {                if(singleton == null){                    singleton = new Singleton();                }            }        }        return singleton ;    }}

五、装饰设计模式

定义一个婴儿的接口,里面有学习的功能

interface Baby{    void study();}

现在有一个小孩实现了婴儿的接口,并学会了他自己的功能

class Child implements Baby{    @Override    public void study() {        System.out.println("小孩学会爬了");           }}

现在又有一个小男孩,不光学会了自己的功能,也继承过来了小孩已经学会了的功能

class Boy implements Baby{    private Child child;    public Boy(Child child) {        super();        this.child = child;    }    @Override    public void study() {        child.study();        System.out.println("小男孩学会跑了");    }}

测试

public void test{        Boy boy = new Boy(new Child());        boy.study();    }
原创粉丝点击