设计模式代码程序

1、单例模式,主要是运用在任何时刻都只有一个对象,比如说:线程池、缓存、对话框、处理偏好设置等等。

package wjy;

public class SingletonClass {

	private static SingletonClass instance = null;
	
	private SingletonClass()
	{
		System.out.println("Singleton pattern ...");
	}
	
	public static SingletonClass getInstance()
	{
		if(instance == null)
		{
			instance = new SingletonClass();
		}
		return instance;
	}

}

package wjy;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SingletonClass one = SingletonClass.getInstance();
		SingletonClass two = SingletonClass.getInstance();
	}

}

2、观察者模式,抽象的观察者定义得到更新后通知自己的接口,具体的观察者实现得到更新后通知自己的接口,抽象的主题定义存储抽象观察者的链表,包括注册、删除和改变状态后通知观察者,具体的主题更改状态。

package wjy;

public interface ObserverClass {
	public void update(String state);
}

package wjy;

public class ConcreteObserver implements ObserverClass {
	//观察者的状态
	private String ObserverState;

	@Override
	public void update(String state) {
		// TODO Auto-generated method stub
		/*
		 * 更新观察者的状态,使其与目标的状态一致
		 */
		ObserverState = state;
		System.out.println("状态为:" + ObserverState);
	}
	
}

package wjy;

import java.util.ArrayList;
import java.util.List;

public abstract class Subject {
	
	/**
	 * 用来保存注册的观察者对象
	 */
	private List<ObserverClass> list = new ArrayList<ObserverClass>();
	
	/**
	 * 注册观察者对象
	 */
	public void attach(ObserverClass observer) {
		list.add(observer);
		System.out.println("添加一个观察者 ...");
	}
	
	/**
	 * 删除观察者对象
	 */
	public void detach(ObserverClass observer) {
		list.remove(observer);
		System.out.println("删除一个观察者 ...");
	}
	
	/**
	 * 通知所有注册的观察者对象
	 */
	public void notifyObserver(String newState) {
		for (ObserverClass observer : list)
		{
			observer.update(newState);
		}
	}
}

package wjy;

public class ConcreteSubject extends Subject {
	private String state;
	
	public String getState() {
		return state;
	}
	
	/**
	 * 更改主题的状态
	 * @param newState
	 */
	public void change(String newState) {
		state = newState;
		System.out.println("主题状态是:" + state);
		this.notifyObserver(state);
	}
}

package wjy;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ConcreteSubject subject = new ConcreteSubject();
		
		ObserverClass Aobserver = new ConcreteObserver();
		ObserverClass Bobserver = new ConcreteObserver();
		
		subject.attach(Aobserver);
		subject.attach(Bobserver);
		
		//改变主题对象的状态
		subject.change("new state");
	}

}

3、工厂模式

package wjy;

public interface Pizza {
	public int getPrice();
	public String getContent();
}

package wjy;

public class PizzaA implements Pizza {
	private int price;
	private String name;
	
	public PizzaA()
	{
		price = 12;
		name = "A";
	}
	@Override
	public int getPrice() {
		// TODO Auto-generated method stub
		return price;
	}

	@Override
	public String getContent() {
		// TODO Auto-generated method stub
		return name;
	}
}

package wjy;

public class PizzaB implements Pizza {
	private int price;
	private String name;
	
	public PizzaB()
	{
		price = 18;
		name = "B";
	}
	@Override
	public int getPrice() {
		// TODO Auto-generated method stub
		return price;
	}

	@Override
	public String getContent() {
		// TODO Auto-generated method stub
		return name;
	}
}

package wjy;

public class SimpleFactory {
	
	public static Pizza createPizza(String type){
		Pizza pizza;
		if (type.equals("A"))
			pizza = new PizzaA();
		else if (type.equals("B"))
			pizza = new PizzaB();
		else
			pizza = null;
		return pizza;
	}

}

package wjy;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pizza pizzaA = SimpleFactory.createPizza("A");
		Pizza pizzaB = SimpleFactory.createPizza("B");
		System.out.println("PizzaA的价格:" + pizzaA.getPrice());
		System.out.println("PizzaB的价格:" + pizzaB.getPrice());
	}

}

4、桥接模式

package wjy;

public interface Road {
	public String showName();
}

package wjy;

public class CityRoad implements Road {

	@Override
	public String showName() {
		// TODO Auto-generated method stub
		return new String("CityRoad");
	}

}

package wjy;

public class HighSpeedRoad implements Road {

	@Override
	public String showName() {
		// TODO Auto-generated method stub
		return new String("HighSpeedRoad");
	}

}

package wjy;

public class HometownRoad implements Road {

	@Override
	public String showName() {
		// TODO Auto-generated method stub
		return new String("HometownRoad");
	}

}

package wjy;

public interface Vehicle {
	public void run(Road road);
}

package wjy;

public class Bike implements Vehicle {

	@Override
	public void run(Road road) {
		// TODO Auto-generated method stub
		System.out.println("Bike is running on " + road.showName());
	}

}

package wjy;

public class Bus implements Vehicle {

	@Override
	public void run(Road road) {
		// TODO Auto-generated method stub
		System.out.println("Bus is running on " + road.showName());
	}

}

package wjy;

public class Car implements Vehicle {

	@Override
	public void run(Road road) {
		// TODO Auto-generated method stub
		System.out.println("Car is running on " + road.showName());
	}
	
}

package wjy;

public class Main {
	public static void main(String args[]) {
		Vehicle bus = new Bus();
		Vehicle car = new Car();
		Vehicle bike = new Bike();
		Road cityroad = new CityRoad();
		Road hometownroad = new HometownRoad();
		Road highspeedroad = new HighSpeedRoad();
		
		bus.run(cityroad);
		car.run(highspeedroad);
		bike.run(hometownroad);
	}
}

/*
** Designed by wjy
** 2014-11-24
** 1-100 factorial
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "oj.h"

void CalcNN(int n, char *pOut)
{
	char temp;
	int i, j;
	int num = 0, gBit = 0, sBit = 0;
	int strLength = 0;
	if (pOut == NULL)
		return;
	
	*pOut = '1';
	*(pOut + 1) = '\0';
	if ((n < 0) || (n >= 100))
	{
		*pOut = '\0';
		return;
	}
	if (n == 0)
	{
		*(pOut + 1) = '\0';
		*pOut = '0';
		return;
	}
	for (i = 1; i <= n; i++)
	{
		j = 0;
		while (*(pOut + j) != '\0')
		{
			num = (*(pOut + j) - '0') * i + gBit;
			gBit = num % 10;
			sBit = num / 10;
			*(pOut + j) = gBit + '0';
			gBit = sBit;
			sBit = 0;
			j++;
		}
		if ((gBit <= 0) || (gBit >= 100))
			gBit = 0;
		else
		{
			if (gBit > 9)
			{
				
				*(pOut + j + 2) = '\0';
				*(pOut + j) = (gBit % 10) + '0';
				*(pOut + j + 1) = (gBit / 10) + '0';
				
			}
			else
			{	
				*(pOut + j + 1) = '\0';
				*(pOut + j) = gBit + '0';
			}
			gBit = 0;
		}
	}

	strLength = strlen(pOut);
	for (i = 0; i < (strLength / 2); i++)
	{
		temp = *(pOut + i);
		*(pOut + i) = *(pOut + strLength -1 - i);
		*(pOut + strLength -1 - i) = temp;
	}
	return;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值