创建型模式(5)
单例模式
package site.yuanrui.establish;
public class SinglePattern {
public static void main(String[] args) {
System.out.println("Singleto:"+(Singleton.getInstance()!=null));
System.out.println("Singleto2:"+(Singleton2.getInstance()!=null));
}
}
class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return singleton;
}
}
class Singleton2{
private static Singleton2 singleton2;
private Singleton2(){}
public static synchronized Singleton2 getInstance(){
if (singleton2 ==null) {
singleton2 = new Singleton2();
}
return singleton2;
}
}
工厂模式
package site.yuanrui.establish;
public class FactoryPattern {
public static void main(String[] args) {
IFactory factory = new Factory();
IProduct product = factory.createProduct();
product.productMethod();
}
}
interface IProduct{
public void productMethod();
}
class Product implements IProduct{
@Override
public void productMethod() {
System.out.println("Product");
}
}
interface IFactory{
public IProduct createProduct();
}
class Factory implements IFactory{
@Override
public IProduct createProduct() {
return new Product();
}
}
抽象工厂模式
package site.yuanrui.establish;
public class AbstractFactoryPattern {
public static void main(String[] args) {
IFactory1 factory = new Facctory();
factory.createProduct1().show();
factory.createProduct2().show();
}
}
interface IProduct1{
public void show();
}
interface IProduct2{
public void show();
}
class Product1 implements IProduct1{
@Override
public void show() {
System.out.println("这是I型产品");
}
}
class Product2 implements IProduct2{
@Override
public void show() {
System.out.println("这是II型产品");
}
}
interface IFactory1{
public IProduct1 createProduct1();
public IProduct2 createProduct2();
}
class Facctory implements IFactory1{
@Override
public IProduct1 createProduct1() {
return new Product1();
}
@Override
public IProduct2 createProduct2() {
return new Product2();
}
}
建造者模式
package site.yuanrui.establish.builderPattern;
public class BuilderPattern {
public static void main(String[] args) {
Director director = new Director();
Product product1 = director.getAProduct();
Product product2 = director.getBPorduct();
product1.showProduct();
product2.showProduct();
}
}
class Product{
private String name;
private String type;
public void showProduct(){
System.out.println("名称:"+this.name);
System.out.println("型号:"+this.type);
}
public void setName(String name){
this.name = name;
}
public void setType(String type){
this.type = type;
}
}
abstract class Builder{
public abstract void setPart(String arg1,String arg2);
public abstract Product getProduct();
}
class ConcreteBuilder extends Builder{
private Product product = new Product();
public Product getProduct(){
return product;
}
@Override
public void setPart(String arg1, String arg2) {
product.setName(arg1);
product.setType(arg2);;
}
}
class Director{
private Builder builder = new ConcreteBuilder();
public Product getAProduct(){
builder.setPart("宝马汽车", "X7");
return builder.getProduct();
}
public Product getBPorduct(){
builder.setPart("奥迪汽车", "Q5");
return builder.getProduct();
}
}
原型模式
package site.yuanrui.establish;
public class PrototypePattern {
public static void main(String[] args) {
ConcretePrototype cp = new ConcretePrototype();
for (int i = 0; i < 10; i++) {
ConcretePrototype clonecp = (ConcretePrototype) cp.clone();
clonecp.show();System.out.println(i);
}
}
}
class Prototype implements Cloneable{
public Prototype clone(){
Prototype prototype = null;
try {
prototype = (Prototype) super.clone();
}
catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return prototype;
}
}
class ConcretePrototype extends Prototype{
public void show() {
System.out.print("原型模式实现类");
}
}
结构型模式(7)
适配器模式
package site.yuanrui.structure;
import com.sun.org.apache.xerces.internal.impl.dv.ValidatedInfo;
public class AdapterPattern {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.adapteeMethod();
target.adapterMethod();
}
}
interface Target{
void adapteeMethod();
void adapterMethod();
}
class Adaptee{
public void adapteeMethod(){
System.out.println("Adaptee method!");
}
}
class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void adapteeMethod() {
adaptee.adapteeMethod();
}
@Override
public void adapterMethod() {
System.out.println("Adapter method!");
}
}
桥接模式
package site.yuanrui.structure;
public class BridgingPattern {
public static void main(String[] args) {
Person1 man = new Man1();
Person1 lady = new Lady();
Clothing jacket = new Jacker();
Clothing trouser = new Trouser();
jacket.personDressCloth(man);
trouser.personDressCloth(man);
jacket.personDressCloth(lady);
trouser.personDressCloth(lady);
System.out.println("====================");
man.dress();
}
}
abstract class Person1{
private Clothing clothing;
private String type;
public Clothing getClothing() {
return clothing;
}
public void setClothing(Clothing clothing) {
this.clothing = clothing;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public abstract void dress();
}
class Man1 extends Person1{
public Man1() {
setType("男人");
}
@Override
public void dress() {
Clothing clothing = getClothing();
clothing.personDressCloth(this);
}
}
class Lady extends Person1{
public Lady() {
setType("女人");
}
@Override
public void dress() {
Clothing clothing = getClothing();
clothing.personDressCloth(this);
}
}
abstract class Clothing{
public abstract void personDressCloth(Person1 person);
}
class Trouser extends Clothing{
public void personDressCloth(Person1 person1) {
System.out.println(person1.getType()+"穿裤子");
person1.setClothing(this);
}
}
class Jacker extends Clothing{
@Override
public void personDressCloth(Person1 person1) {
System.out.println(person1.getType()+"穿马甲");
person1.setClothing(this);
}
}
组合模式
package site.yuanrui.structure;
import java.util.ArrayList;
import java.util.List;
public class CombinationPattern {
public static void main(String[] args) {
Employer pm = new ProjectManager("项目经理");
Employer pa = new ProjectAssistant("项目助理");
Employer programmer1 = new Programmer("程序员一");
Employer programmer2 = new Programmer("程序员2");
pm.add(pa);
pm.add(programmer2);
List<Employer> ems = pm.getEmployers();
for (Employer em:ems) {
System.out.println(em.getName());
}
}
}
abstract class Employer{
private String name;
public List < Employer > employers;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public abstract void add(Employer employer);
public abstract void delete(Employer employer);
public void printfInfo() {
System.out.println(name);
}
public List < Employer > getEmployers() {
return this.employers;
}
}
class Programmer extends Employer{
public Programmer(String name) {
setName(name);
employers = null;
}
public void add(Employer employer) {
}
@Override
public void delete(Employer employer) {
}
}
class ProjectAssistant extends Employer{
public ProjectAssistant(String name) {
setName(name);
employers = null;
}
@Override
public void add(Employer employer) {
}
@Override
public void delete(Employer employer) {
}
}
class ProjectManager extends Employer{
public ProjectManager(String name) {
setName(name);
employers = new ArrayList<>();
}
@Override
public void add(Employer employer) {
employers.add(employer);
}
@Override
public void delete(Employer employer) {
employers.remove(employer);
}
}
装饰模式
package site.yuanrui.structure;
import java.lang.annotation.Repeatable;
public class DecoratePattern {
public static void main(String[] args) {
Man man = new Man();
ManDecoratorA md1 = new ManDecoratorA();
ManDecoratorB md2 = new ManDecoratorB();
md1.setPerson(man);
md2.setPerson(md1);
md2.eat();
}
}
interface Person{
void eat();
}
class Man implements Person{
@Override
public void eat() {
System.out.println("男人在吃");
}
}
abstract class Decorator implements Person{
protected Person person;
public void setPerson(Person person) {
this.person = person;
}
public void eat(){
person.eat();
}
}
class ManDecoratorA extends Decorator{
public void eat(){
super.eat();
reEat();
System.out.println("ManDecoratorA类");
}
public void reEat() {
System.out.println("在吃一顿饭");
}
}
class ManDecoratorB extends Decorator{
public void eat() {
super.eat();
System.out.println("===========");
System.out.println("ManDecoratorB类");
}
}
外观模式
package site.yuanrui.structure;
public class AppearancePattern {
public static void main(String[] args) {
ServiceA sa = new ServiceAImpl();
ServiceB sb = new ServiceBImpl();
sa.methodA();
sb.methodB();
System.out.println("=================");
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
interface ServiceA{
void methodA();
}
interface ServiceB{
void methodB();
}
interface ServiceC{
void methodC();
}
class ServiceAImpl implements ServiceA{
@Override
public void methodA() {
System.out.println("这是服务A");
}
}
class ServiceBImpl implements ServiceB{
@Override
public void methodB() {
System.out.println("这是服务B");
}
}
class ServiceCImpl implements ServiceC{
@Override
public void methodC() {
System.out.println("这是服务C");
}
}
class Facade{
ServiceA sa;
ServiceB sb;
ServiceC sc;
public Facade() {
sa = new ServiceAImpl();
sb = new ServiceBImpl();
sc = new ServiceCImpl();
}
public void methodA() {
sa.methodA();
sb.methodB();
}
public void methodB() {
sb.methodB();
sc.methodC();
}
public void methodC() {
sc.methodC();
sa.methodA();
}
}
享元模式
package site.yuanrui.structure;
public class SharePattern {
}
代理模式
package site.yuanrui.structure;
public class AgentPattern {
public static void main(String[] args) {
Object object = new ProxyObject();
object.action();
}
}
class ProxyObject implements Object{
Object object;
public ProxyObject() {
System.out.println("这是代理类");
object = new ObjectImpl();
}
@Override
public void action() {
System.out.println("代理开始");
object.action();
System.out.println("代理结束");
}
}
interface Object{
void action();
}
class ObjectImpl implements Object{
@Override
public void action() {
System.out.println("==============");
System.out.println("这是被代理的类");
System.out.println("==============");
}
}
行为型模式(11)
访问者模式
package site.yuanrui.behavior;
import java.util.*;
public class VisitorPattern {
public static void main(String[] args) {
List < Element > list = ObjectStruture.getList();
for (Element element : list) {
element.accept(new Visitor());
}
}
}
abstract class Element{
public abstract void accept(IVisitor visitor);
public abstract void doSomething();
}
interface IVisitor{
public void visit(ConcreteElement1 el1);
public void visit(ConcreteElement2 el2);
}
class ConcreteElement1 extends Element{
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}
@Override
public void doSomething() {
System.out.println("这是元素1");
}
}
class ConcreteElement2 extends Element{
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}
@Override
public void doSomething() {
System.out.println("这是元素2");
}
}
class Visitor implements IVisitor{
public void visit(ConcreteElement1 el1) {
el1.doSomething();
}
public void visit(ConcreteElement2 el2) {
el2.doSomething();
}
}
class ObjectStruture{
public static List<Element> getList(){
List < Element > list = new ArrayList<Element>();
Random ran = new Random();
for (int i = 0; i < 10; i++) {
int a = ran.nextInt(100);
if (a>50) {
list.add(new ConcreteElement1());
}else{
list.add(new ConcreteElement2());
}
}
return list;
}
}
模版模式
package site.yuanrui.behavior;
import jdk.internal.dynalink.beans.StaticClass;
public class TemplatePattern {
public static int[] a = {10,32,1,9,5,7,12,0,4,3};
public static void main(String[] args) {
AbstractSort s = new ConcreteSort();
s.showSortResult(a);
}
}
abstract class AbstractSort{
protected abstract void sort(int[] array);
public void showSortResult(int[] array) {
this.sort(array);
System.out.println("排序结果");
for (int i = 0; i < array.length; i++) {
System.out.printf("%3s",array[i]);
}
}
}
class ConcreteSort extends AbstractSort{
protected void sort(int[] array) {
for(int i = 0;i<array.length-1;i++){
selectSort(array,i);
}
}
private void selectSort(int[] array, int index) {
int MinValue = 32767;
int indexMin = 0;
int Temp;
for (int i = index; i < array.length; i++) {
if (array[i]<MinValue) {
MinValue = array[i];
indexMin = i;
}
}
Temp = array[index];
array[index] = array[indexMin];
array[indexMin] = Temp;
}
}
策略模式
package site.yuanrui.behavior;
public class StrategyPattern {
public static void main(String[] args) {
Context context;
System.out.println("----执行策略1----");
context = new Context(new ConcreteStrategy1());
context.execute();
System.out.println("----执行策略2----");
context = new Context(new ConcreteStrategy2());
context.execute();
}
}
interface IStrategy{
public void doSomething();
}
class ConcreteStrategy1 implements IStrategy{
public void doSomething(){
System.out.println("具体策略1");
}
}
class ConcreteStrategy2 implements IStrategy{
@Override
public void doSomething() {
System.out.println("具体策略2");
}
}
class Context{
private IStrategy strategy;
public Context(IStrategy strategy){
this.strategy = strategy;
}
public void execute(){
strategy.doSomething();
}
}
状态模式
package site.yuanrui.behavior;
public class StatePattern {
public static void main(String[] args) {
Context1 context1 = new Context1();
context1.setWeather(new Sunshine());
System.out.println(context1.weatherMessage());
System.out.println("===========");
Context1 context12 = new Context1();
context12.setWeather(new Rain());
System.out.println(context12.weatherMessage());
}
}
class Context1{
private Weather weather;
public void setWeather(Weather weather) {
this.weather = weather;
}
public Weather getWeather() {
return this.weather;
}
public String weatherMessage(){
return weather.getWeather();
}
}
interface Weather{
String getWeather();
}
class Rain implements Weather{
@Override
public String getWeather() {
return "下雨";
}
}
class Sunshine implements Weather{
@Override
public String getWeather() {
return "阳光";
}
}
观察者模式
package site.yuanrui.behavior;
import java.util.Observable;
import java.util.Vector;
public class ObserverPattern {
public static void main(String[] args) {
Subject sub = new ConcreteSubject();
sub.addObserver(new ConcreteObserver1());;
sub.addObserver(new ConcreteObserver2());
sub.doSomething();
}
}
abstract class Subject{
private Vector < Observer > obs = new Vector<Observer>();
public void addObserver(Observer obs){
this.obs.add(obs);
}
public void delObserver(Observer obs){
this.obs.remove(obs);
}
public void notifyObserver(){
for(Observer o:obs){
o.update();
}
}
public abstract void doSomething();
}
class ConcreteSubject extends Subject{
public void doSomething(){
System.out.println("被观察者事件发生");
this.notifyObserver();
}
}
interface Observer{
public void update();
}
class ConcreteObserver1 implements Observer{
@Override
public void update() {
System.err.println("观察者1收到信息,并进行处理");
}
}
class ConcreteObserver2 implements Observer{
public void update() {
System.err.println("观察者2收到信息,并进行处理");
}
}
备忘录模式
package site.yuanrui.behavior;
public class MemorandumPattern {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setState("状态1");
System.out.println("初始状态"+originator.getState());
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());
originator.setState("状态2");
System.out.println("状态2");
System.out.println("改变后状态:"+originator.getState());
originator.restoreMemento(caretaker.getMemento());
System.out.println("恢复后状态:"+originator.getState());
}
}
class Originator{
private String state = "";
public String getState() {
return this .state;
}
public void setState(String state){
this.state = state;
}
public Memento createMemento() {
return new Memento(this.state);
}
public void restoreMemento(Memento memento){
this.setState(memento.getState());
}
}
class Memento{
private String state = "";
public Memento(String state) {
this.state = state;
}
public String getState(){
return this.state;
}
public void setState(String state){
this.state = state;
}
}
class Caretaker{
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento){
this.memento = memento;
}
}
中介者模式
package site.yuanrui.behavior;
public class IntermediaryPattern {
}
abstract class AbstractColleague{
protected int number;
public int getNumber(){
return number;
}
public void setNumber(int number){
this.number = number;
}
public abstract void setNumber(int number,AbstractColleague coll);
}
class ColleagueA extends AbstractColleague{
public void setNumber(int number,AbstractColleague coll){
this.number = number;
coll.setNumber(number*100);
}
}
class ColleagueB extends AbstractColleague{
public void setNumber(int number,AbstractColleague coll) {
this.number = number;
coll.setNumber(number/100);
}
}
迭代器模式
package site.yuanrui.behavior;
import java.util.ArrayList;
import java.util.List;
import sun.launcher.resources.launcher;
public class IteratorPattern {
public static void main(String[] args) {
Aggregate ag = new ConcreteAggregate();
ag.add("小明");
ag.add("小红");
ag.add("小刚");
Iterator it = ag.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
interface Iterator{
public Object next();
public boolean hasNext();
}
class ConcreteIterator implements Iterator{
private List list = new ArrayList<>();
private int cursor = 0;
public ConcreteIterator(List list) {
this.list = list;
}
@Override
public Object next() {
Object obj = null;
if (this.hasNext()) {
obj = this.list.get(cursor++);
}
return obj;
}
@Override
public boolean hasNext() {
if (cursor == list.size()) {
return false;
}
return true;
}
}
interface Aggregate{
public void add(Object obj);
public void remove(Object obj);
public Iterator iterator();
}
class ConcreteAggregate implements Aggregate{
private List list = new ArrayList();
@Override
public void add(Object obj) {
list.add(obj);
}
@Override
public void remove(Object obj) {
list.remove(obj);
}
@Override
public Iterator iterator() {
return new ConcreteIterator(list);
}
}
解释器模式
package site.yuanrui.behavior;
import java.util.Stack;
public class InterpreterPattern {
public static void main(String[] args) {
String expression = "";
char[] charArray = expression.toCharArray();
Context2 ctx = new Context2();
Stack < Expression > stack = new Stack<Expression>();
for (int i = 0; i < charArray.length; i++) {
}
Expression exp = stack.pop();
exp.interpreter(ctx);
}
}
class Context2{}
abstract class Expression{
public abstract Object interpreter(Context2 ctx);
}
class TerminalExpression extends Expression{
public Object interpreter(Context2 ctx) {
return null;
}
}
class NonterminalExpression extends Expression{
public NonterminalExpression(Expression...expressions) {
}
public Object interpreter(Context2 ctx) {
return null;
}
}
命令模式
package site.yuanrui.behavior;
public class CommandPattern {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
command.execute();
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.action();
}
}
class Invoker{
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void action() {
this.command.execute();
}
}
abstract class Command{
public abstract void execute();
}
class ConcreteCommand extends Command{
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
this.receiver.doSomething();
}
}
class Receiver{
public void doSomething() {
System.out.println("接收者-业务逻辑处理");
}
}
责任链模式
package site.yuanrui.behavior;
public class ResponsibilityPattern {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setNextHandler(handler2);
handler2.setNextHandler(handler3);
Response response = handler1.handleRequest(new Request(new Level(2)));
}
}
class Level{
private int level = 0;
public Level(int level){
this.level = level;
}
public boolean above(Level level){
if (this.level >= level.level) {
return true;
}
return false;
}
}
class Request{
Level level;
public Request(Level level){
this.level = level;
}
public Level getLevel(){
return level;
}
}
class Response{}
abstract class Handler{
private Handler nexthandler;
public final Response handleRequest(Request request){
Response response = null;
if (this.getHandlerLevel().above(request.getLevel())) {
response = this.response(request);
}else{
if (this.nexthandler!=null) {
this.nexthandler.handleRequest(request);
}
else {
System.out.println("----没有合适的处理器----");
}
}
return response;
}
public void setNextHandler(Handler handler){
this.nexthandler = handler;
}
protected abstract Level getHandlerLevel();
public abstract Response response(Request request);
}
class ConcreteHandler1 extends Handler{
@Override
protected Level getHandlerLevel() {
return new Level(1);
}
@Override
public Response response(Request request) {
System.out.println("----请求由处理器1进行处理---");
return null;
}
}
class ConcreteHandler2 extends Handler{
@Override
protected Level getHandlerLevel() {
return new Level(3);
}
@Override
public Response response(Request request) {
System.out.println("----请求由处理器2进行处理---");
return null;
}
}
class ConcreteHandler3 extends Handler{
@Override
protected Level getHandlerLevel() {
return new Level(5);
}
@Override
public Response response(Request request) {
System.out.println("----请求由处理器3进行处理---");
return null;
}
}