Java设计模式——单例,装饰者,观察者

单例模式

基于static:只允许生成一个对象

package pattern.singleton;

class Singletone {//饿汉模式
	private static Singletone s = new Singletone();//必须在这里实例化

	private Singletone() {
	}

	public static Singletone getSingleton() {
		return s;
	}
}

class Singletonb {//饱汉模式
	private String name;
	private static Singletonb s;

	private Singletonb(String name) {
		this.name = name;
	}

	public static Singletonb getSingleton(String name) {
		if (s == null) {//效率,只要判断一次
			synchronized ("lock") {//加锁,线程安全
				if (s == null) {
					s = new Singletonb(name);
				}
			}
		}
		return s;
	}
}
class Singleton{
	public static void main(String[] args) {
		String name="hah";
		Singletone se1=Singletone.getSingleton();
		Singletone se2=Singletone.getSingleton();
		Singletonb sb1=Singletonb.getSingleton(name);
		Singletonb sb2=Singletonb.getSingleton(name);
		System.out.println(se1==se2);
		System.out.println(sb1==sb2);
	}
}

基于多态的模式:

 

装饰者模式

package pattern.decorate;

class Work{
//	String can;
//	public Work(String can){
//		this.can=can;
//	}
	public void Do(){
		
	};
}
class Paint extends Work{
    Work work;
	
    public Paint(Work work) {
//		super(work.can);
    	this.work = work;
	}

	@Override
	public void Do() {
		work.Do();
		System.out.println("我能画画");
//		this.work.can=work.can+"我能画画";// TODO Auto-generated method stub
		
	}
	
}
class Mood extends Work{
	Work work;
	
	public Mood(Work work) {
//		super(work.can);
		this.work = work;
	}

	@Override
	public void Do() {
		work.Do();
		System.out.println("我会做木工");
//		this.work.can=work.can+"我会做木工";// TODO Auto-generated method stub
		
	}
	
}
class Paste extends Work{
	Work work;
	
	public Paste(Work work) {
//		super(work.can);
		this.work = work;
	}

	@Override
	public void Do() {
		work.Do();
		System.out.println("我能贴画");
//		this.work.can=work.can+"我能贴画";
		
	}
	
}
public class Decorate {
	public static void main(String[] args) {
		Paste father=new Paste(new Mood(new Paint(new Work())));
		father.Do();
//		System.out.println(father.can);
	}
}

观察者模式

 

 

参考:https://www.cnblogs.com/luohanguo/p/7825656.html
 
package pattern.observe;

public class Observe {

	public static void main(String[] args) {
		WeatherStation ws=new WeatherStation();
		Student s1=new Student();
		Student s2=new Student();
		ws.add(s1);
		ws.add(s2);
		ws.startt();
	}

}

 

 

 

package pattern.observe;

public interface Personaction {
	public void notifyWeather(String weather);
}
 
package pattern.observe;

public class Student implements Personaction{

	@Override
	public void notifyWeather(String weather) {
		switch(weather){
		case "晴":System.out.println("qin");break;
		case "雨":System.out.println("yu");break;
		case "雾霾":System.out.println("wumai");break;
		case "雪":System.out.println("xue");break;
		case "多云":System.out.println("duoyun");break;
		}
		
	}

}
 
 
package pattern.observe;

import java.util.ArrayList;
import java.util.Random;

public class WeatherStation {
	String weather;
	String[] weathers={"晴","雨","多云","雾霾","雪"};
	ArrayList<Personaction> list=new ArrayList<Personaction>();
	public void weathergeneration(){		
		Random random=new Random();
		int index=random.nextInt(weathers.length);
		weather=weathers[index];
		System.out.println("当前天气是:"+weather);
	}
	public void add(Personaction e){
		list.add(e);
	}
	public void startt(){
		while(true){
			weathergeneration();
			for(Personaction lis:list){
				lis.notifyWeather(weather);
			}
			try {
				Thread.sleep(1500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace(); 
			}			
			
		}
	}
	public static void main(String[] args){
		new WeatherStation().startt();
	}

}


工厂模式

参考:

https://blog.csdn.net/zxt0601/article/details/52798423

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值