摘要: 设计模式分类 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状.
/**
* 饿汉式:
* 类初始化时,会立即加载对象,线程天生安全,效率高
*/
public class User {
// 存在方法区,不会回收
private static User user = new User();
private User() {
}
public User getInstance() {
return user;
}
/**
* 懒汉式:
* 类初始化时,不会真正创建对象,只有使用时才真正创建对象
*/
public class User {
private static User user;
private User() {
}
public static synchronized User getInstance() {
if (user == null)
user = new User();
return user;
}
}
/**
* 静态内部类:
* 兼顾了懒汉模式的内存优化(使用时才初始化)以及饿汉模式的安全性(不会被反射入侵)
*/
public class User {
private User(){
}
static class SingletonClassInstance{
private static final User user = new User();
}
public static User getInstance() {
return SingletonClassInstance.user;
}
}
/**
* 枚举:
* 枚举天生就是单例,从JVM提供保障单例,避免反射,缺点没有延迟加载
*/
public class User {
private User() {
}
public static User getInstance() {
return SingletonUserEnum.INSTANCE.getInstance();
}
static enum SingletonUserEnum{
INSTANCE;
private User user;
private SingletonUserEnum() {
user = new User();
}
public User getInstance() {
return this.user;
}
}
}
/**
* 双重检验锁:
* 线程安全的单例模式
*/
public class User {
private String userName;
private volatile static User3 user3;
private User(){
}
public User getInstance(){
if (user == null) {
synchronized (this) {
if (user == null){
user = new User();
}
}
}
return user;
}
}
/**
* 简单工厂相当于一个工厂有各种产品,用户无需知道具体产品的名称,只需要知道产品对应的参数即可
* 缺点是类型过多不利于扩展维护
*/
public class CarFactory {
public static Car createrCar(String name) {
if (name == null || name.equals(""))
return null;
if (name.equals("比亚迪"))
return new BydCar();
if (name.equals("吉利"))
return new JiliCar();
return null;
}
}
/**
* 核心工厂不在负责所有产品的创建,而是将具体实现交给子类
*/
public interface CarFactory {
Car createrCar(String name);
}
class BydFactory implements CarFactory {
@Override
public Car createrCar(String name) {
return new BydCar();
}
}
class JiliFactory implements CarFactory {
@Override
public Car createrCar(String name) {
return new JiliCar();
}
}
/**
* 抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品
*/
public interface Engine {
void run();
}
class EngineA implements Engine{
@Override
public void run() {
System.out.println("发动机转速快");
}
}
class EngineB implements Engine {
@Override
public void run() {
System.out.println("发动机转速慢");
}
}
public interface Chair {
void run();
}
class ChairA implements Chair {
@Override
public void run() {
System.out.println("自动加热");
}
}
class ChairB implements Chair {
@Override
public void run() {
System.out.println("不能加热");
}
}
public interface CarFactory {
// 创建发动机
Engine createEngine();
// 创建座椅
Chair createChair();
}
public class JiliFactory implements CarFactory{
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public Chair createChair() {
return new ChairA();
}
}
5.jpg (18.72 KB, 下载次数: 19)
6.jpg (34.19 KB, 下载次数: 18)
4.jpg (13.11 KB, 下载次数: 23)
6.jpg (34.19 KB, 下载次数: 49)
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |