黑马程序员——设计模式-单例模式&工厂模式

------- android培训java培训、期待与您交流! ----------

 

单例模式

有这样一个类, 只提供对外获取对象的方法, 只能生成一个对象, 这样的类设计模式被称为单例模式

单例模式的两种实现方式

1. 懒汉式(延迟加载)

2. 饿汉式(非延迟加载)

 

实现代码

package homework;

public class SingleTest {

	public static void main(String[] args) {
		Single1 s1 = Single1.getInstance();
		Single1 s2 = Single1.getInstance();
		System.out.println(s1 == s2);
		
		Single2 s3 = Single2.getInstance();
		Single2 s4 = Single2.getInstance();
		System.out.println(s3 == s4);

	}

}

//非延迟加载
class Single1 {
	//定义一个私有的静态的本类对象
	private static Single1 instance = new Single1();
	
	//定义私有的无参构造方法
	private Single1 () {	
	}
	
	//定义外部类获取实例的方法
	public static Single1 getInstance() {
		return instance;
	}
	
}

//延迟加载
class Single2 {
	//定义一个私有的静态的本类对象
	private static Single2 instance;
	
	//定义私有的无参构造方法
	private Single2 () {		
	}
	
	//定义外部类获取实例的方法
	public static Single2 getInstance() {
		if (instance == null) {
			instance = new Single2();
		}
		return instance;
	}
	
}

面向对象代码示例

 

工厂模式

工厂模式是设计一个工厂类, 利用多态的特性, 通过在创建对象的时候给构造方法传入一个参数来返回相应的数据

 

实现代码

import java.util.*;

class CarTest {
	public static void main(String[] args) {
		// 用工厂类获得相应ID的实例
		Car c = CarFactory.getInstance(Bmw.BMWID);
		// 运行获得的实例的方法
		c.run();
	}
}

// 定义一个工厂类识车的对象
class CarFactory {
	public static Car getInstance(int id) {
		// 定义Car对象
		Car car = null;
		switch (id) {
		case Bmw.BMWID:
			car = new Bmw();
			break;
		case Benz.BENZID:
			car = new Benz();
			break;
		case Golf.GOLFID:
			car = new Golf();
			break;
		}
		return car;

	}
}

// 创建以个车的基类
class Car {
	// 定义一个公共的run方法
	void run() {
		System.out.println("Car run");
	}
}

// 创建一个宝马的类
class Bmw extends Car {
	public static final int BMWID = 1;

	void run() {
		System.out.println("Bwm run......");
	}
}

// 创建一个奔驰的类
class Benz extends Car {
	public static final int BENZID = 2;

	void run() {
		System.out.println("Benz run......");
	}
}

// 创建一个高尔夫的类
class Golf extends Car {
	public static final int GOLFID = 3;

	void run() {
		System.out.println("Golf run......");
	}
}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象的实现 10 1.6.5 运用复用机制 13 1.6.6 关联运行时刻和编译时刻的 结构 15 1.6.7 设计应支持变化 16 1.7 怎样选择设计模式 19 1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor和Composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 Abstract Factory模式 35 2.6 支持多种窗口系统 35 2.6.1 我们是否可以使用Abstract Factory 模式 35 2.6.2 封装实现依赖关系 35 2.6.3 Window和WindowImp 37 2.6.4 Bridge 模式 40 2.7 用户操作 40 2.7.1 封装一个请求 41 2.7.2 Command 类及其子类 41 2.7.3 撤消和重做 42 2.7.4 命令历史记录 42 2.7.5 Command 模式 44 2.8 拼写检查和断字处理 44 2.8.1 访问分散的信息 44 2.8.2 封装访问和遍历 45 2.8.3 Iterator类及其子类 46 2.8.4 Iterator模式 48 2.8.5 遍历和遍历过程中的动作 48 2.8.6 封装分析 48 2.8.7 Visitor 类及其子类 51 2.8.8 Visitor 模式 52 2.9 小结 53 第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 Adapter与Bridge 144 4.8.2 Composite、Decorator与Proxy 145 第5章 行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为型模式 147 5.2 COMMAND(命令)—对象行为型 模式 154 5.3 INTERPRETER(解释器)—类行为型 模式 162 5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值