12.设计模式

1.单例设计模式

package cn.mldn.demo;
class Singleton {								// 单例程序类
	// 在类内部进行Single类对象实例化,为了防止可能出现重复实例化所以使用final标记
	private static final Singleton INSTANCE = new Singleton();
	private Singleton() {}						// 构造方法私有化,外部无法通过关键字new实例化 
	/**
	 * 获取本类实例化对象方法,static方法可以不受实例化对象的限制进行调用
	 * @return INSTANCE内部实例化对象,不管调用多少次此方法都只返回同一个实例化对象
	 */
	public static Singleton getInstance() {
		return INSTANCE;
	}
	public void print() {							// 信息输出
		System.out.println("www.mldn.cn");
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		// 在外部不管有多少个Singleton类对象,实质上最终都只调用唯一的一个Singleton类实例
		Singleton instance = null; 				// 声明对象
		instance = Singleton.getInstance();		// 获取实例化对象
		instance.print();						// 通过实例化对象调用方法
	}
}

2.工厂设计模式

interface IFood { 									// 定义食物标准
	public void eat(); 								// 食物的核心功能:吃
}
class Bread implements IFood { 						// 食物:面包
	public void eat() {								// 覆写方法
		System.out.println("吃面包。");
	}
}
class Milk implements IFood { 						// 食物:牛奶
	public void eat() {								// 覆写方法
		System.out.println("喝牛奶。");
	}
}
class Factory {
	/**
	 * 获取IFood接口实例化对象,利用此方法对外隐藏子类,由于Factory类没有属性,所以定义static方法
	 * @param className 要获取的子类标记
	 * @return 存在指定标记返回对应子类实例,否则返回null
	 */
	public static IFood getInstance(String className) {
		if ("bread".equals(className)) {				// 判断子类标记
			return new Bread();						// 返回子类实例
		} else if ("milk".equals(className)) {			// 判断子类标记
			return new Milk();						// 返回子类实例
		} else {
			return null;								// 没有匹配类型返回null
		}
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		IFood food = Factory.getInstance("bread");		// 通过工厂获取实例
		food.eat();									// 调用公共标准
	}
}

3.代理设计模式

interface IEat {									// 定义核心业务标准
	public void get();							// 业务方法
}
class EatReal implements IEat {					// 定义真实主题类
	public void get() {							// 核心实现
		System.out.println("【真实主题】得到一份食物,而后开始品尝美味。");
	}
}
class EatProxy implements IEat { 					// 定义代理主题类
	private IEat eat; 							// 核心业务实例
	public EatProxy(IEat eat) { 					// 设置代理项
		this.eat = eat;
	}
	public void get() {							// 代理实现方法
		this.prepare();							// 业务执行前的准备
		this.eat.get();							// 【真实业务】调用核心业务操作
		this.clear();							// 业务执行后的处理
	}
	public void prepare() { 						// 【代理操作】准备过程
		System.out.println("【代理主题】1、精心购买食材。");
		System.out.println("【代理主题】2、小心的处理食材。");
	}
	public void clear() { 						// 【代理操作】收尾处理
		System.out.println("【代理主题】3、收拾碗筷。");
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		IEat eat = new EatProxy(new EatReal());	// 获取代理对象,同时传入被代理者
		eat.get();								// 调用代理方法
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值