`

JAVA范例 八)面向对象---面向对象的设计模式、垃圾回收

 
阅读更多

      8.3 面向对象的设计模式

  实例156 Singleton单例模式

public class TestClass {							// 单例模式的测试类
	public static void main(String[] args) {
		Singleton object1 = Singleton.getSingleton(); 	// 调用方法获得实例
		Singleton object2 = Singleton.getSingleton(); 	// 调用方法获得实例
		System.out.println("用Singleton类实现单例模式的实例如下:");
		System.out.println("调用next()方法前:");
		System.out.println("object1.amount=" + object1.getAmount());
		System.out.println("object2.amount=" + object2.getAmount());
		object1.next(); 							// 调用方法
		System.out.println("\n调用next()方法后:");
		System.out.println("object1.amount=" + object1.getAmount());
		System.out.println("object2.amount=" + object2.getAmount());
	}
}
class Singleton {
	private static int amount = 5; 					// 私有属性
	private static Singleton singleton = new Singleton();// Singleton的唯一实例
	private Singleton() { // 创建private私有构造函数的目的为防止外界构造Singleton实例
	}
	public static Singleton getSingleton() { 			// 获取Singleton的实例
		return singleton;
	}
	public synchronized int getAmount() { 			// synchronized关键字表示方法是线程同步
		return amount; 						// 任一时刻最多只能有一个线程进入该方法
	}
	public synchronized void next() { 				// 将amount加1
		amount++;
	}
}

 

  实例157 招聘(简单工厂模式)

public class FactoryOne {
	public static void main(String[] args) {
		try {
			Person person = Recruitment.findWork("Middle_Programmer"); // 调用方法返回车的实例
			System.out.println("请各位谈谈自己的工作经历好吗?");
			person.experience(); 	// 调用方法开车
		} catch (Exception e) { 		// 捕获异常
			System.out.println("招聘的过程中出现了问题,停止招聘");
		} finally { 					// 代码总被执行
			System.out.println("......");
		}
	}
}
class Recruitment {
	public static Person findWork(String s) throws Exception {
		if (s.equalsIgnoreCase("Low_Programmer")) { // 判断传入参数返回不同的实现类
			return new Low_Programmer();
		} else if (s.equalsIgnoreCase("Middle_Programmer")) {
			return new Middle_Programmer();
		} else if (s.equalsIgnoreCase("High_Programmer")) {
			return new High_Programmer();
		} else {
			throw new Exception(); 		// 抛出异常
		}
	}
}
interface Person {
	public void experience();				// 工作经验
}
class Low_Programmer implements Person {	// 初级程序员
	public void experience() {
		System.out.println("我刚走出大学校门,目前只有不到一年的工作经验!!");
	}
}
class Middle_Programmer implements Person {// 中级程序员
	public void experience() {
		System.out.println("我已经毕业一年多了,目前有二年多的工作经验!");
	}
}
class High_Programmer implements Person {// 高级程序员
	public void experience() {
		System.out.println("我已经毕业很多年了,目前有五年多的工作经验!");
	}
}

 

  实例158 同学聚会(工厂方法模式)

package Chapter08;
public class FactoryTwo {
	public static void main(String[] args) { // java程序主入口处
		try {
			Forms form = new ShangHai();// 接口变量引用实现类对象
			MeetOfStudents mos = form.place(); // 调用方法返回聚会的实例
			System.out.println("今年咱们同学去哪聚会啊?");
			mos.form(); // 调用方法获得聚会的方式
		} catch (Exception e) { // 捕获异常
			System.out.println("今年的同学聚会取消?");
		} finally { // 代码总被执行
			System.out.println("......");
		}
	}
}
interface MeetOfStudents {// 聚会的形式
	public void form();
}
interface Forms {// 聚会的地方
	public MeetOfStudents place();
}
class Hotels implements MeetOfStudents {// 酒店
	public void form() {
		System.out.println("我们去酒店好好的吃一顿吧!");
	}
}
class Home implements MeetOfStudents {// 个人家里
	public void form() {
		System.out.println("我们还是去谁家好好的聊聊天,吃一顿便饭吧");
	}
}
class Nightclub implements MeetOfStudents {// 夜总会
	public void form() {
		System.out.println("我们还是去夜总会好好的High一次吧,放松一下心情");
	}
}
class QinHuangDao implements Forms {// 秦皇岛
	public MeetOfStudents place() {
		return new Hotels();
	}
}
class ShangHai implements Forms {// 上海
	public MeetOfStudents place() {
		return new Nightclub();
	}
}
class BeiJing implements Forms {// 北京
	public MeetOfStudents place() {
		return new Home();
	}
}

 

  实例159 图书展(抽象工厂模式)

public class FactoryThree {
	public static void main(String[] args) {
		PropertyOfBook garden = ShowBooks.getProperty("计算机型"); // 传入参数调用方法获得实例
		Book bookname = garden.getBookName();	// 获取书的名字
		Book author = garden.getAuthor();			// 获取书的作者
		Book price = garden.getPrice();				// 获取书的价格
		System.out.println("书的名字:" + bookname.getName());
		System.out.println("书的作者:" + author.getName());
		System.out.println("书的价格:" + price.getName());
	}
}
class Book { 					// 书类
	String name; 				// 书的名称
	public Book(String name) { 	// 带参数的构造方法
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
abstract class PropertyOfBook {			// 书的属性
	public abstract Book getAuthor(); 		// 作者
	public abstract Book getPrice();			// 价格
	public abstract Book getBookName(); 	// 书的名字
}
class Computer extends PropertyOfBook { 	// 计算机类的
	public Book getAuthor() {
		return new Book("张三");
	}
	public Book getBookName() {
		return new Book("Java Web实例大全");
	}
	public Book getPrice() {
		return new Book("88.00");
	}
}
class English extends PropertyOfBook 		// 英语类
{
	public Book getAuthor() {
		return new Book("张小红");
	}
	public Book getBookName() {
		return new Book("跟我学英语");
	}
	public Book getPrice() {
		return new Book("35.8");
	}
}
class Health extends PropertyOfBook	// 健康类
{
	public Book getAuthor() {
		return new Book("李四");
	}
	public Book getBookName() {
		return new Book("人类长寿的10个秘密");
	}
	public Book getPrice() {
		return new Book("66.9");
	}
}
class ShowBooks {					// 定义抽象工厂类
	private static PropertyOfBook po;
	public static PropertyOfBook getProperty(String type) {
		po = new Computer(); 		// 默认为计算机类
		if (type.equals("英语类"))
			po = new English();
		if (type.equals("健康类"))
			po = new Health();
		return po;
	}
}

 

  实例160 汽车适配器(Adapter适配器模式)

public class Adapter {
	
	public static void main(String[] args) {
		Honda honda = new Honda(); // 实例化对象
		honda.setColor("red"); // 设置位置
		honda.display(); // 显示颜色
		honda.move(); // 移动距离
		AudiAdapter audi = new AudiAdapter();// 实例化适配器
		audi.setColor("black"); // 设置位置
		audi.setSpeed(60);
		audi.display(); // 显示颜色
		audi.move(); // 移动距离
	}
}
interface Car { // 定义车接口
	public void setColor(String color); // 设置颜色
	public String getColor(); // 获得颜色
	public void setSpeed(int Speed); // 设置车速
	public int getSpeed(); // 获得车速
	public void move(); // 移动的距离
	public void display(); // 显示车的颜色
}
class Honda implements Car { // 定义一个继承了car接口的轿车本田
	String color;
	int speed;
	public void setColor(String color) {
		this.color = color;
	}
	public String getColor() {
		return this.color;
	}
	public int getSpeed() {
		return this.speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	public void move() {
		System.out.println("本田车已经移动到:" + 3 * speed);
	}
	public void display() {
		System.out.println("本田车的颜色为:" + color);
	}
}
class Audi { // 定义一个奥迪车,没有实现Car接口
	String color;
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public void display() {
		System.out.println("奥迪车的颜色为:" + color);
	}
}
class AudiAdapter implements Car {
	private Audi audi;
	private int speed;
	public AudiAdapter() {
		audi = new Audi();
	}
	public void display() {
		audi.display();
	}
	public String getColor() {
		return audi.getColor();
	}
	public void setColor(String color) {
		audi.setColor(color);
	}
	// 为奥迪车扩展Move()和setSpeed以及getSpeed的方法
	public int getSpeed() {
		return speed;
	}
	public void move() {
		System.out.println("奥迪车已经移动到:" + 3 * speed);
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
}

 

  8.4 垃圾回收

  实例161 垃圾回收的机制

public class GarbageCollector {
	static int count;
	int index;
	GarbageCollector() {
		count++;
		System.out.println("object " + count + " is constracted");
		setid(count);
	}
	void setid(int id) {
		index = id;
	}
	protected void finalize(int count) {
		System.out.println("object " + index
				+ " is GarbageCollectord collection");
	}
	public static void main(String args[]) {
		new GarbageCollector();
		new GarbageCollector();
		new GarbageCollector();
		new GarbageCollector();
		new GarbageCollector();
		System.gc();
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics