博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式
阅读量:6989 次
发布时间:2019-06-27

本文共 8452 字,大约阅读时间需要 28 分钟。

hot3.png

简单工厂模式概述和使用

package cn.itcast_01;public abstract class Animal {	public abstract void eat();}
package cn.itcast_01;public class Cat extends Animal {	@Override	public void eat() {		System.out.println("猫吃鱼");	}}
package cn.itcast_01;public class Dog extends Animal {	@Override	public void eat() {		System.out.println("狗吃肉");	}}
package cn.itcast_01;public class AnimalFactory {	private AnimalFactory() {	}	// public static Dog createDog() {	// return new Dog();	// }	//	// public static Cat createCat() {	// return new Cat();	// }	public static Animal createAnimal(String type) {		if ("dog".equals(type)) {			return new Dog();		} else if ("cat".equals(type)) {			return new Cat();		} else {			return null;		}	}}
package cn.itcast_01;public class AnimalDemo {	public static void main(String[] args) {		// 具体类调用		Dog d = new Dog();		d.eat();		Cat c = new Cat();		c.eat();		System.out.println("------------");		// 工厂有了后,通过工厂给造		// Dog dd = AnimalFactory.createDog();		// Cat cc = AnimalFactory.createCat();		// dd.eat();		// cc.eat();		// System.out.println("------------");		// 工厂改进后		Animal a = AnimalFactory.createAnimal("dog");		a.eat();		a = AnimalFactory.createAnimal("cat");		a.eat();		// NullPointerException		a = AnimalFactory.createAnimal("pig");		if (a != null) {			a.eat();		} else {			System.out.println("对不起,暂时不提供这种动物");		}	}}

工厂方法模式的概述和使用

package cn.itcast_02;public abstract class Animal {	public abstract void eat();}
package cn.itcast_02;public class Cat extends Animal {	@Override	public void eat() {		System.out.println("猫吃鱼");	}}
package cn.itcast_02;public class Dog extends Animal {	@Override	public void eat() {		System.out.println("狗吃肉");	}}
package cn.itcast_02;public interface Factory {	public abstract Animal createAnimal();}
package cn.itcast_02;public class CatFactory implements Factory {	@Override	public Animal createAnimal() {		return new Cat();	}}
package cn.itcast_02;public class DogFactory implements Factory {	@Override	public Animal createAnimal() {		return new Dog();	}}
package cn.itcast_02;public class AnimalDemo {	public static void main(String[] args) {		// 需求:我要买只狗		Factory f = new DogFactory();		Animal a = f.createAnimal();		a.eat();		System.out.println("-------");				//需求:我要买只猫		f = new CatFactory();		a = f.createAnimal();		a.eat();	}}

单例模式之饿汉士

package cn.itcast_03;public class Student {	// 构造私有	private Student() {	}	// 自己造一个	// 静态方法只能访问静态成员变量,加静态	// 为了不让外界直接访问修改这个值,加private	private static Student s = new Student();	// 提供公共的访问方式	// 为了保证外界能够直接使用该方法,加静态	public static Student getStudent() {		return s;	}}
package cn.itcast_03;/* * 单例模式:保证类在内存中只有一个对象。 *  * 如何保证类在内存中只有一个对象呢? * 		A:把构造方法私有 * 		B:在成员位置自己创建一个对象 * 		C:通过一个公共的方法提供访问 */public class StudentDemo {	public static void main(String[] args) {		// Student s1 = new Student();		// Student s2 = new Student();		// System.out.println(s1 == s2); // false		// 通过单例如何得到对象呢?		// Student.s = null;		Student s1 = Student.getStudent();		Student s2 = Student.getStudent();		System.out.println(s1 == s2);		System.out.println(s1); // null,cn.itcast_03.Student@175078b		System.out.println(s2);// null,cn.itcast_03.Student@175078b	}}

设计模式之懒汉式

package cn.itcast_03;/* * 单例模式: * 		饿汉式:类一加载就创建对象 * 		懒汉式:用的时候,才去创建对象 *  * 面试题:单例模式的思想是什么?请写一个代码体现。 *  * 		开发:饿汉式(是不会出问题的单例模式) * 		面试:懒汉式(可能会出问题的单例模式) * 			A:懒加载(延迟加载)	 * 			B:线程安全问题 * 				a:是否多线程环境	是 * 				b:是否有共享数据	是 * 				c:是否有多条语句操作共享数据 	是 */public class Teacher {	private Teacher() {	}	private static Teacher t = null;	public synchronized static Teacher getTeacher() {		// t1,t2,t3		if (t == null) {			//t1,t2,t3			t = new Teacher();		}		return t;	}}
package cn.itcast_03;public class TeacherDemo {	public static void main(String[] args) {		Teacher t1 = Teacher.getTeacher();		Teacher t2 = Teacher.getTeacher();		System.out.println(t1 == t2);		System.out.println(t1); // cn.itcast_03.Teacher@175078b		System.out.println(t2);// cn.itcast_03.Teacher@175078b	}}

单例模式的java代码体现Runtime类

package cn.itcast_03;import java.io.IOException;/* * Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。 * exec(String command) */public class RuntimeDemo {	public static void main(String[] args) throws IOException {		Runtime r = Runtime.getRuntime();//		r.exec("winmine");		// r.exec("notepad");		// r.exec("calc");//		r.exec("shutdown -s -t 10000");		r.exec("shutdown -a");	}}/* * class Runtime { * 		private Runtime() {} * 		private static Runtime currentRuntime = new Runtime(); * 		public static Runtime getRuntime() { *       	return currentRuntime; *   	} * } */

模版设计模式的概述和使用

package cn.itcast_01;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public abstract class GetTime {	// 需求:请给我计算出一段代码的运行时间	public long getTime() {		long start = System.currentTimeMillis();		// for循环		// for (int x = 0; x < 10000; x++) {		// System.out.println(x);		// }		// 视频		// try {		// BufferedInputStream bis = new BufferedInputStream(		// new FileInputStream("a.avi"));		// BufferedOutputStream bos = new BufferedOutputStream(		// new FileOutputStream("b.avi"));		// byte[] bys = new byte[1024];		// int len = 0;		// while ((len = bis.read(bys)) != -1) {		// bos.write(bys, 0, len);		// }		// bos.close();		// bis.close();		// } catch (IOException e) {		// e.printStackTrace();		// }		// 再给我测试一个代码:集合操作的,多线程操作,常用API操作的等等...		code();		long end = System.currentTimeMillis();		return end - start;	}	public abstract void code();}
package cn.itcast_01;public class ForDemo extends GetTime {	@Override	public void code() {		for (int x = 0; x < 100000; x++) {			System.out.println(x);		}	}}
package cn.itcast_01;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class IODemo extends GetTime{	@Override	public void code() {		try {			BufferedInputStream bis = new BufferedInputStream(					new FileInputStream("a.avi"));			BufferedOutputStream bos = new BufferedOutputStream(					new FileOutputStream("b.avi"));			byte[] bys = new byte[1024];			int len = 0;			while ((len = bis.read(bys)) != -1) {				bos.write(bys, 0, len);			}			bos.close();			bis.close();		} catch (IOException e) {			e.printStackTrace();		}	}	}
package cn.itcast_01;public class GetTimeDemo {	public static void main(String[] args) {		// GetTime gt = new GetTime();		// System.out.println(gt.getTime() + "毫秒");		GetTime gt = new ForDemo();		System.out.println(gt.getTime() + "毫秒");		gt = new IODemo();		System.out.println(gt.getTime() + "毫秒");	}}

装饰模式概述和使用

package cn.itcast_02;public interface Phone {	public abstract void call();}
package cn.itcast_02;public class IPhone implements Phone {	@Override	public void call() {		System.out.println("手机可以打电话了");	}}
package cn.itcast_02;public abstract class PhoneDecorate implements Phone {	private Phone p;	public PhoneDecorate(Phone p) {		this.p = p;	}	@Override	public void call() {		this.p.call();	}}
package cn.itcast_02;public class RingPhoneDecorate extends PhoneDecorate {	public RingPhoneDecorate(Phone p) {		super(p);	}	@Override	public void call() {		System.out.println("手机可以听彩铃");		super.call();	}}
package cn.itcast_02;public class MusicPhoneDecorate extends PhoneDecorate {	public MusicPhoneDecorate(Phone p) {		super(p);	}	@Override	public void call() {		super.call();		System.out.println("手机可以听音乐");	}}
package cn.itcast_02;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Scanner;public class PhoneDemo {	public static void main(String[] args) {		Phone p = new IPhone();		p.call();		System.out.println("------------");		// 需求:我想在接电话前,听彩铃		PhoneDecorate pd = new RingPhoneDecorate(p);		pd.call();		System.out.println("------------");		// 需求:我想在接电话后,听音乐		pd = new MusicPhoneDecorate(p);		pd.call();		System.out.println("------------");		// 需求:我要想手机在接前听彩铃,接后听音乐		// 自己提供装饰类,在打电话前听彩铃,打电话后听音乐		pd = new RingPhoneDecorate(new MusicPhoneDecorate(p));		pd.call();		System.out.println("----------");		// 想想我们在IO流中的使用		// InputStream is = System.in;		// InputStreamReader isr = new InputStreamReader(is);		// BufferedReader br = new BufferedReader(isr);		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));		BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(				System.out)));		Scanner sc = new Scanner(System.in);	}}

 

转载于:https://my.oschina.net/u/2356966/blog/624968

你可能感兴趣的文章
NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
查看>>
python系统监控--转载
查看>>
2019年我国云计算行业存在的问题和发展趋势
查看>>
DXF图纸打开后怎么改变保存其格式为DWG?
查看>>
zabbix 监控 介绍
查看>>
SVN使用
查看>>
针对代码类测试的要点总结
查看>>
oracle 10g 启动 停止服务 批处理
查看>>
Docker部署私有仓库
查看>>
SQL Mirror配置手册
查看>>
linux bash bc awk 浮点 计算 比较
查看>>
基于socket.io的实时消息推送
查看>>
查询进程并杀死
查看>>
VMXNET3 vs E1000E and E1000
查看>>
7200的GRE(隧道)+ipsec(传输模式+pre-share)配置
查看>>
四、编译安装php-5.5.34
查看>>
Thinkpad X240修改bios引导,U盘安装系统
查看>>
Slave SQL: Relay log read failure: Could not parse relay log event entry.
查看>>
抽取Zabbix的图形整合到自己后台
查看>>
Linux输入子系统
查看>>