NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
## 设计模式 ### 单例模式 ~~~JAVA package com.dodoke.demo5; /** * 单例模式-饿汉式单例模式 * @author 一教室 * */ public class ClientE { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } /** * 因为构造器私有,所以这能在本类中调用构造器 * 单例类必须自己创建自己的唯一实例。 */ private static ClientE clientE = new ClientE(); /** * 单例类必须给所有其他对象提供这一实例。 * 写一个方法对外提供clientE */ public static ClientE getInstance() { return clientE; } /** * 构造器本质上也是一种方法,只不过是一种特殊的方法,没有返回值,只能用来创建对象 */ private ClientE() { } } ~~~ ~~~java package com.dodoke.demo5; /** * 单例模式-饱汉式单例模式(懒汉式单例模式) * @author 一教室 * */ public class ClientB { /** * 此时没有主动开辟内存空间 */ private static ClientB clientB;//null /** * 相较于饿汉式单例模式,饱汉式单例模式不会主动去开辟内存空间创建对象,只有在调用对外方法getInstance的时候才会创建对象 * 节省了系统开销 * @return */ public static ClientB getInstance() { if(null == clientB) { clientB = new ClientB();//在调用对外方法的时候为clientB开辟内存空间 } return clientB; } private ClientB() { } } ~~~ ~~~java package com.dodoke.demo5; public class Demo { public static void main(String[] args) { /** * 打印出来后,c1和c2指向的是同一个地址 * 它们仅仅只是变量名不同,本质上是同一个对象 */ ClientE c1 = ClientE.getInstance(); c1.setName("陆文鑫"); System.out.println(c1); ClientE c2 = ClientE.getInstance(); System.out.println(c2); System.out.println(c2.getName()); c2.setAge(27); System.out.println(c1.getAge()); ClientB c3 = ClientB.getInstance(); ClientB c4 = ClientB.getInstance(); System.out.println(c3); System.out.println(c4); } } ~~~ ### 工厂模式 ~~~java package com.dodoke.demo5; public interface Product { /** * 产品说明书 */ public void desc(); } ~~~ ~~~java package com.dodoke.demo5; public class MobliePhone implements Product { @Override public void desc() { System.out.println("生产手机"); } } ~~~ ~~~java package com.dodoke.demo5; public class Pad implements Product { @Override public void desc() { System.out.println("生产平板"); } } ~~~ ~~~java package com.dodoke.demo5; public class Computer implements Product { @Override public void desc() { System.out.println("生产电脑"); } } ~~~ ~~~java package com.dodoke.demo5; /** * 简单工厂模式 * @author 一教室 * 好比简单工厂就是一个小作坊,客户来订单我才开始生产对应产品 */ public class SimpleFactory { /** * 生产方法 * @param order 相当于客户的订单信息 * @return */ public static Product produce(String order) { if("phone".equals(order)) { return new MobliePhone();//根据对应订单信息生产对应产品 } else if("computer".equals(order)) { return new Computer(); } else if("pad".equals(order)) { return new Pad(); } else { return null; } } } ~~~ ~~~java package com.dodoke.demo5; /** * 工厂模式 * @author 一教室 * 相当于工厂做大做强,不再是之前小作坊,有了自己的生产线 */ public class Factory { //手机生产线 public static Product producePhone() { return new MobliePhone(); } //电脑生产线 public static Product produceComputer() { return new Computer(); } //平板生产线 public static Product producePad() { return new Pad(); } } ~~~ ~~~java package com.dodoke.demo5; public class Demo2 { public static void main(String[] args) { Product pdt = SimpleFactory.produce("computer"); pdt.desc(); Product pdt2 = Factory.producePhone(); pdt2.desc(); } } ~~~