## 设计模式
### 单例模式
~~~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();
}
}
~~~
- 课程开始
- 第一课20191008
- 第二课20191009
- HTML
- CSS
- CSS第一课
- CSS第二课
- CSS第三课
- CSS第四课
- CSS第五课
- JavaScript
- Js第一课
- Js第二课
- Js第三课
- Js第四课
- Js第五课
- Js第六课
- Js第七课
- Js-事件模型
- Js-2019-10-31-标准库
- Js-2019-11-01- 标准库
- Js-2019-11-01-Json
- Js-2019-11-01-对象的创建
- Js-2019-11-04-this的使用
- Js-2019-11-05-storage与异常
- Js-2019-11-05-BOM与补充知识点
- Js-2019-11-06-正则表达式和计时器
- jQuery
- jQuery-2019-11-13-初识jQuery
- jQuery-2019-11-14-jQuery节点操作
- jQuery-2019-11-15-jQuery节点操作二
- jQuery-2019-11-16-jQuery效果与动画
- Java
- Java-2019-11-27-变量直接量数据格式运算符
- Java-2019-11-28-流程控制
- Java-2019-12-02-数组
- Java-2019-12-04 面向对象
- Java-2019-12-05-封装
- Java-2019-12-06-深入构造器
- Java-2019-12-09-继承
- Java-2019-12-10-多态
- Java-2019-12-10-包装类
- Java-2019-12-11-final修饰符
- Java-2019-12-11-包装类
- Java-2019-12-11-接口
- java-2019-12-13-设计模式
- Java-2019-12-16-集合框架
- Java-2019-12-18-集合排序
- Java-2019-12-23-常用类学习
- Java-2019-12-25-异常处理
- Java-2019-12-31-内部类详解
