【设计模式】创建型模式总结

来源:互联网 发布:tom围棋 mac 编辑:程序博客网 时间:2024/06/06 06:58

看了一些资料,以自己能理解的方式总结些许东西。可能会有很多地方理解错误,希望不要误导了别人。整理的过程也是自己学习的过程。

一、单例模式

        简介:顾名思义,单例模式(singleton pattern)保证一个类只生产一个对象。

        情景:用于一些重量级资源,节约资源。

        注意:多线程下需要注意同步锁。

        Demo:

/** * singleton pattern * @author TF * */public class SingleObject {    //    private static SingleObject instance = new SingleObject();    public static SingleObject getInstance(){        return instance;    }    //私有构造方法,不允许直接创建对象    private SingleObject() {}}




二、工厂模式

        简介:生产对象的工厂,工厂模式(Factory Pattern),提供一个接口,传入参数生产对应类型的对象。

        情景:例如数据库切换等。提升了系统的灵活性。

        注意:不宜滥用,工厂模式会增加类的数量与系统复杂度。

        Demo:

class FoodFactory {public Food getFood(String food){switch (food) {case "fish":return new Fish();case "meat":return new Meat();default:return new WestNothWind();}   }}interface Food{}class Fish implements Food{public Fish() {System.err.println("fish");}}class Meat implements Food{public Meat() {System.err.println("Meat");}}class WestNothWind implements Food{public WestNothWind() {System.err.println("fuck");}}public class TestFactoryPattern{public static void main(String[] args) {FoodFactory foodFactory = new FoodFactory();foodFactory.getFood("meat");}}


三、抽象工厂模式

        简介:抽象工厂模式(Abstract Factory pattern),简单来说,就是生产工厂的工厂。

        情景:

        注意:

        Demo:

//人对象interface Human{}class Boy implements Human{public Boy() {System.err.println("boy");}}class Girl implements Human{public Girl() {System.err.println("girl");}}class Bill implements Human{public Bill() {System.err.println("Billy Herrington");}}//具体工厂interface Factory{}class HumanFactory implements Factory{Human human=null;public Human getHuman(String sex){try {if(sex==null||"".equals(sex)){human=new Bill();}else if("男".equals(sex)){human=new Boy();}else if("女".equals(sex)){human=new Bill();}else{human=new Bill();}} catch (Exception e) {human=new Bill();}return human;}}//抽象工厂class abstractFactory {public HumanFactory getHumanFactory(){return new HumanFactory();}public HumanFactory getAnimalFactory(){return new HumanFactory();}}public class TestFactoryPattern{public static void main(String[] args) {abstractFactory af = new abstractFactory();HumanFactory humanFactory = af.getHumanFactory();humanFactory.getHuman("男");}}


四、建造者模式

        简介:建造者模式(Builder Pattern),打包创建对象。

        情景:假如某一个大的对象由很多小对象构成(一台电脑由鼠标、键盘、主机。。。组成,抽象出一个接口为标准).

        注意:

        Demo:

/** * 建造模式 * @author TF * */public class Test {    public static void main(String[] args) {        Buy b = new Buy();        b.buyStationery();    }}//第一种 静态interface Computer{    void createMouse();    void  acreateKeyBord();    void  acreateBox();    void  acreateDisplay();}class MyPersonComputer1 implements Computer{    @Override    public void createMouse() {}    @Override    public void acreateKeyBord() {}    @Override    public void acreateBox() {}    @Override    public void acreateDisplay() {}    }//第二种 动态interface Shop{    String getName();    Double getPrice();}class Toy implements Shop{    @Override    public String getName() {        return "toy";    }    @Override    public Double getPrice() {        return 10.0;    }}class Pen implements Shop{    @Override    public String getName() {        return "pen";    }    @Override    public Double getPrice() {        return 20.0;    }}class Pencil implements Shop{    @Override    public String getName() {        return "Pencil";    }    @Override    public Double getPrice() {        return 2.0;    }}class Biro implements Shop{    @Override    public String getName() {        return "Biro";    }    @Override    public Double getPrice() {        return 30.0;    }}class Ball implements Shop{    @Override    public String getName() {        return "ball";    }    @Override    public Double getPrice() {        return 40.0;    }}//购物车class Buy{    List<Shop> shopList = new ArrayList<>();    double price;    //买文具建造    public void buyStationery(){        shopList.add(new Pen());        shopList.add(new Pencil());        shopList.add(new Biro());        System.out.println(getPrice());    }    public double getPrice(){        for(Shop p:shopList){            price+=p.getPrice();        }        return price;    }}


五、原型模式

        简介:原型模式(Prototype Pattern})预先创建好对象存放进map中,使用时直接取出即可.

        情景:数据源

        注意:对象类实现cloneable接口

        Demo:

public class Box { private static Map<String, Color> map = new HashMap<String, Color>(); static{ map.put("red", new Red()); map.put("Green", new Green()); map.put("blue", new Blue()); } public static Color getColor(String name){ return map.get(name); }}
public class T { public static void main(String[] args) {  Color color = Box.getColor("red"); color.show(); Color color2 = Box.getColor("red"); color2.show(); Color color3 = Box.getColor("red"); color3.show(); Color color4 = Box.getColor("red"); color4.show();}}





原创粉丝点击