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;
}