设计模式--创建型(2)
来源:互联网 发布:钱咖试客类似的软件 编辑:程序博客网 时间:2024/04/28 20:27
四、Singleton(单例模式)
思想:在整个系统中,某类有且仅有一个实例。
代码:
public class Singleton{ //静态私有成员变量 private static Singleton instance=null; private Singleton() { } public static Singleton getInstance() { if(instance==null) instance=new Singleton(); return instance; }}
解析:
单例模式注意三点:
(1)单例类的构造函数设为private。
(2)提供一个自身的静态私有成员变量。
(3)提供一个公有的静态工厂方法。
构造函数的使用:
(1)new 一个类的实例。
(2)函数中通过this调用其他的构造方法。
当构造方法被private后:
(1)不能在程序中new一个新的实例。
(2)该类不能被继承,因为如果继承了,构造函数是private,则子类在实例化的时候不能实例化,所以继承一个构造函数private的类是不被允许的。
所以构造方法私有化,用private修饰,可以防止创建多个实例。
静态工厂方法:
设置为静态工厂方法,因为静态方法可以直接使用类名进行调用,所以当要得到一个单例类的实例时,可以直接 类名.getInstance(),返回类的实例。
私有静态变量:
如果单例类的成员变量不是static,则静态工厂方法是没有办法调用该私有变量的,所以成员变量必须为static。
五、Builder(建造者模式)
思想: 一个复杂对象的创建工作,通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法相对稳定。
例子: 有比亚迪和吉利两个车企,生产一辆汽车都需要轮子,发动机和底盘。虽然是两个不同的企业,但是一辆车子的结构相近。所以可以设计一种模式。将建造产品的过程分离出来,使用相同的创建过程创建不同的产品。
代码:
//汽车类public class Car { private String wheel; //轮子 private String engine; //发动机 private String underpan;//底盘 //下面为set和get方法 public String getWheel(){} public void setWheel(String wheel){this.wheel=wheel;} public String getEngine(){} public void setEngine(String engine){this.engine=engine;} public String getUnderpan(){} public void setUnderpan(String underpan){this.underpan=underpan;}}//Builder抽象类public abstract Builder{ protected Car car=new Car(); //成员变量 public void buildWheel(); public void buildEngine(); public void buildUnderpan(); public Car getResult() { return car; }}//具体的BYDBuilderpublic class BYDBuilder implements Builder{ public void buildWheel() { car.setWheel("BYD wheel"); } public void buildEngine() { car.setEngine("BYD Engine"); } public void buildUnderpan() { car.setUnderpan("BYD Underpan"); }}//具体的GeelyBuilderpublic class GeelyBuilder implements Builder{ public void buildWheel() { car.setWheel("Geely wheel"); } public void buildEngine() { car.setEngine("Geely Engine"); } public void buildUnderpan() { car.setUnderpan("Geely Underpan"); }}//Director类public class Director{ private Builder builder; public Director(Builder builder) { this.builder=builder; } public Car construct() { builder.buildWheel(); builder.buildEngine(); builder.buildUnderpan(); return builder.getResult(); }}//生成一个BYD汽车Builder builder = new BYDBuilder();Director director = new Director(builder);Car car=director.construct();//生成一个geely汽车Builder builder = new GeelyBuilder();Director director = new Director(builder);Car car=director.construct();//生成两个不同的汽车,唯一的区别就在生成不同的builder。
优点:
将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。当增加新的产品时,只需要创建新的建造者类即可,易于系统的扩展。
- 【设计模式】对象创建—创建型模式(2)
- 设计模式--创建型(2)
- 设计模式(2)-创建型-原型模式(Prototype)
- 设计模式笔记(2)---单件模式(创建型)
- 设计模式(2)——创建型模式
- 创建型设计模式(2):简单工厂模式
- 设计模式初探2-创建型模式
- JAVA设计模式-2-创建型模式
- 设计模式-创建型模式(读书笔记)
- 设计模式(三)创建型模式
- 设计模式(一):创建型模式
- 设计模式(二) 创建型模式
- 设计模式(一)--创建型模式
- 【设计模式】对象创建—创建型模式(1)
- 创建型设计模式
- 创建型设计模式
- 设计模式(创建型)
- 创建型设计模式
- MyReport实践:为ERP系统添加打印功能
- [LeetCode] Validate Binary Search Tree
- 移动硬盘打不开,提示“文件或目录损坏无法读取”
- leetCode题解
- Windows 10 配置vagrant环境
- 设计模式--创建型(2)
- new与malloc的10点区别
- OpenCV中GPU模块的使用
- android-利用broadcast双程序相互监控保证目标程序运行
- android基础——Build.VERSION.SDK_INT
- 如何下载各版本Chrome的离线安装包
- ural 1144. The Emperor's Riddle
- 深度学习(一)
- #storm error(一)