【设计模式】创建型模式总结
来源:互联网 发布: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();}}
阅读全文
0 0
- 设计模式---创建型设计模式总结
- 创建型设计模式总结
- 创建型设计模式总结
- 设计模式:创建型总结
- 创建型设计模式总结
- 设计模式学习总结-创建型模式
- 设计模式-创建型模式总结
- 设计模式总结—创建型模式
- 【设计模式基础】创建型模式 - 总结
- 设计模式大总结-创建型模式
- 设计模式总结之创建型模式
- 设计模式大总结-创建型模式
- 【大话设计模式】--创建型模式总结
- 设计模式(6) - 创建型模式总结
- 【设计模式】--创建型模式总结
- 【设计模式】创建型模式总结
- 设计模式-创建型模式总结
- 大话设计模式-总结(1)-创建型设计模式
- GitHub基本命令汇总
- 面向对象编程(一)创建类,实例化,属性引用
- 理解WebKit和Chromium: WebKit和Chromium组成
- 并查集模板
- 2017西安交大ACM小学期数据结构 [树状数组]
- 【设计模式】创建型模式总结
- poj1979 Red and Black
- 链表的反转问题
- Java怎么实现从控制台输入
- 面向对象
- JSP 语法
- 图
- Mac系统MAMP环境下php7安装redis.so拓展
- linux 常用命令