单例模式
基于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